/**
 * 检测是否为数组
 * @param {*} value 输入值
 * @returns {boolean} 如果是数组返回 true，否则返回 false
 */
export function isArray(value) {
	return Array.isArray ? Array.isArray(value) : Object.prototype.toString.call(value) === "[object Array]";
}

/**
 * 检测是否为普通对象
 * @param {*} value 输入值
 * @returns {boolean} 如果是普通对象返回 true，否则返回 false
 */
export function isObject(value) {
	return Object.prototype.toString.call(value) === "[object Object]";
}

/**
 * 检测是否为数字
 * @param {*} value 输入值
 * @returns {boolean} 如果是数字返回 true，否则返回 false
 */
export function isNumber(value) {
	return !isNaN(Number(value));
}

/**
 * 检测是否为函数
 * @param {*} value 输入值
 * @returns {boolean} 如果是函数返回 true，否则返回 false
 */
export function isFunction(value) {
	return typeof value === "function";
}

/**
 * 检测是否为字符串
 * @param {*} value 输入值
 * @returns {boolean} 如果是字符串返回 true，否则返回 false
 */
export function isString(value) {
	return typeof value === "string";
}

/**
 * 检测是否为空（null 或 undefined）
 * @param {*} value 输入值
 * @returns {boolean} 如果为空返回 true，否则返回 false
 */
export function isNull(value) {
	return value == null;
}

/**
 * 检测是否为布尔值
 * @param {*} value 输入值
 * @returns {boolean} 如果是布尔值返回 true，否则返回 false
 */
export function isBoolean(value) {
	return typeof value === "boolean";
}

/**
 * 检测是否为 Promise 对象
 * @param {*} value 输入值
 * @returns {boolean} 如果是 Promise 对象返回 true，否则返回 false
 */
export function isPromise(value) {
	return value && typeof value === 'object' && typeof value.then === 'function' && typeof value.catch === 'function';
}

/**
 * 检测是否为空（数组、对象或空字符串/undefined/null）
 * @param {*} value 输入值
 * @returns {boolean} 如果为空返回 true，否则返回 false
 */
export function isEmpty(value) {
	if (isArray(value)) {
		return value.length === 0;
	}
	if (isObject(value)) {
		return Object.keys(value).length === 0;
	}
	return value === "" || value === undefined || value === null;
}